package com.adcc.ags.gms.user.service;

import com.adcc.ags.gms.mq.vo.QueueVO;
import com.adcc.ags.gms.user.entity.GWUser;
import com.adcc.ags.gms.user.vo.GWUserVO;
import com.github.pagehelper.PageInfo;
import com.google.common.base.Optional;
import org.dom4j.Document;

import java.util.List;

/**
 * 网关用户服务层
 */
public interface GWUserService {

    /**
     * 是否存相同用户名
     * @param name
     * @return
     */
    public Optional<Boolean> isExistGWUserName(String name);

    /**
     * 是否存在相同用户ID
     * @param id
     * @return
     */
    public Optional<Boolean> isExistGWUserId(String id);

    /**
     * 查找所有网关用户
     * @return
     */
    public Optional<List<GWUserVO>> findAllGWUser();

    /**
     * 查找未使用队列
     * @return
     */
    public Optional<List<QueueVO>> findUnusedQueue();

    /**
     * 查找未使用接收队列
     * @return
     */
    public Optional<List<QueueVO>> findUnusedRecvQueue();

    /**
     * 根据用户名称查询网关用户
     * @param name
     * @param currentPage
     * @param pageSize
     * @return
     */
    public Optional<PageInfo<GWUser>> findGWUserByName(String name,int currentPage, int pageSize);

    /**
     * 根据用户ID查询
     * @param queueId
     * @return
     */
    public List<GWUser> findByQueueId(Long queueId);

    /**
     * 新增网关用户
     * @param gwUserVO
     * @return
     */
    public Optional<Boolean> createGWUser(GWUserVO gwUserVO);

    /**
     * 更新网关用户
     * @param user
     * @return
     */
    public Optional<Boolean> updateGWUser(GWUserVO user);

    /**
     * 删除网关用户
     * @param id
     * @return
     */
    public Optional<Boolean> deleteGWUser(long id,Boolean flag);

    /**
     * 上线网关用户
     * @param id
     * @return
     */
    public Optional<Boolean> gwUserOnline(long id);

    /**
     * 下线网关用户
     * @param id
     * @return
     */
    public Optional<Boolean> gwUserOffline(long id);

    /**
     * 创建用户列表
     * @return
     */
    public Document createUserList();

    /**
     * 更新用户列表(推送操作)
     * @return
     */
    public Optional<Boolean> updateUserList();
}
